const express = require("express");
const app = express();
const server = require("http").Server(app);
const io = require('socket.io')(server)

// 记录所有已经登录过的用户
const users = []

server.listen(3000, () => {
  console.log('服务器启动成功');
})

// 处理静态资源
app.use(express.static('public'))

app.get('/', (req, res) => {
  res.redirect('/index.html')
})
io.on("connection", (socket) => {
  console.log('有用户连接了');
  socket.on('login', data => {
    // 判断， 如果data在users中存在，说明该用户已经登录，如果data在users中不存在，说明该用户未登录
    let user = users.find(item => item.username === data.username)
    if (user) {
      // 表示用户存在,服务器需要给当前用户响应，告诉用户失败
      socket.emit('loginError', { msg: '登录失败' })
      // console.log('登录失败');
    } else {
      users.push(data)
      socket.emit('loginSuccess', data)
      // console.log('登录成功');

      // 告诉所有用户，有用户加入到了聊天室。 广播消息
      io.emit('addUser', data)

      // 告诉所有的用户目前聊天室中有多少用户
      io.emit('userList', users)

      // 把登录成功的用户名和头像存储起来
      socket.usename = data.username
      socket.avatar = data.avatar
    }
  }) 

  // 用户断开连接的功能
  // 监听用户断开连接
  socket.on('disconnect', () => {
    // 把当前用户的信息从users中删除掉
    let idx = users.findIndex(item => item.username === socket.username)
    // 删除掉断开连接的用户
    users.splice(idx, 1)
    // 告诉所有用户，有人离开了聊天室
    io.emit('delUser', {
      username: socket.usename,
      avatar: socket.avatar
    })
    // 告诉所有人，userList发生更新
    io.emit('userList', users)
  })

  // 监听聊天的消息
  socket.on('sendMsg', data => {
    // console.log(data);
    // 广播给所有用户
    io.emit('receiveMsg', data)
  })

  // 接收图片信息
  socket.on('sendImg', data => {
    // console.log(data);
    // 广播给所有用户
    io.emit('receiveImg', data)
  })
});

